/*
 * app_cli.h
 *
 *  Created on: 2023年6月29日
 *      Author: HXF
 */

#ifndef APP_CLI_H_
#define APP_CLI_H_

#include "app_cli_config.h"
#include "app_cli_command.h"
#include "app_cli_arguments.h"

#define DS_CLI_COMMAND(function,...)                       \
{                                                          \
  (function),    /* Pointer to command function */         \
  __VA_ARGS__    /* Argument list*/                        \
}

#define ds_cli_get_argument_count(a)      ((int)((a)->argc - (a)->arg_ofs))
#define ds_cli_get_argument_type(a, n)    ((ds_cli_arg_t)((a)->arg_type_list[(n)]))
#define ds_cli_get_argument_int8(a, n)    (*(int8_t *)((a)->argv[(a)->arg_ofs + (n)]))
#define ds_cli_get_argument_int16(a, n)   (*(int16_t *)((a)->argv[(a)->arg_ofs + (n)]))
#define ds_cli_get_argument_int32(a, n)   (*(int32_t *)((a)->argv[(a)->arg_ofs + (n)]))
#define ds_cli_get_argument_uint8(a, n)   (*(uint8_t *)((a)->argv[(a)->arg_ofs + (n)]))
#define ds_cli_get_argument_uint16(a, n)  (*(uint16_t *)((a)->argv[(a)->arg_ofs + (n)]))
#define ds_cli_get_argument_uint32(a, n)  (*(uint32_t *)((a)->argv[(a)->arg_ofs + (n)]))
#define ds_cli_get_argument_string(a, n)  ((char *)((a)->argv[(a)->arg_ofs + (n)]))

int DS_cli_handle_work(ds_cli_handle_t handle);

#define CLI_TEST  (0)

#if (CLI_TEST == 1)
void DS_cli_test(void);
#endif

#endif /* APP_CLI_H_ */
